<?php

class Materials_Model_Label extends Workset_Model_Object_Abstract
{

    const TYPE = 'materials_label';

    protected $_objectType = self::TYPE;

    protected $_hasRelations = true;

    /**
     * Возвращает объект Materials_Model_Label по primary key
     *
     * @static
     * @param  mixed $identity
     * @return Materials_Model_Label
     *
     */
	static function getInstance($identity) {
		$storage = self::getDefaultStorage(self::TYPE);
		return self::getFromStorage($storage, $identity);
	}

    /**
     * Создает новый объект Materials_Model_Label с полями $data
     *
     * @static
     * @param  array $data
     * @return Materials_Model_Label
     *
     */
	static function create($data) {
		$storage = self::getDefaultStorage(self::TYPE);
		return $storage->create($data);
	}

	/**
     * Возвращает список материалов
     *
     * @static
     * @param  mixed $where
     * @param  mixed $order
     * @param  int $limit
     * @param  int $offset
     * @return Catalogue_Model_Object_Iterator
     *
     */
    static function getAll($where = null, $order = null, $limit = null, $offset = null, $offsetByPage = false) {
        $storage = self::getDefaultStorage(self::TYPE);
        return $storage->getAll($where, $order, $limit, $offset, $offsetByPage);
    }

    /**
     * Инициализация объекта
     *
     * @return void
     */
    public function init() {
        $this->attach(new Materials_Model_Label_Observer_CodeGenerator());
    }

    /**
     * Возвращает список материалов привязанных к данной метке
     *
     * @param  $where
     * @param  $order
     * @param  $limit
     * @param  $offset
     * @param bool $offsetByPage
     * @return
     */
    public function getMaterials($where = null, $order = null, $limit = null, $offset = null, $offsetByPage = false) {
        return $this->getStorage()->getMaterials($this, $where, $order, $limit, $offset, $offsetByPage);
    }

    /**
     * Возвращает количество материалов привязанных к данной метке
     *
     * @param  $where
     * @return int
     */
    public function materialsCount($where = null) {
        return $this->getStorage()->materialsCount($this, $where);
    }

    /**
     * Возвращает название метки
     *
     * @return string
     */
    public function getName() {
        return $this['name'];
    }

    /**
     * Устанавливает новое название метки
     *
     * @param  $name
     * @return Materials_Model_Label
     */
    public function setName($name) {
        $this['name'] = (string)$name;
        return $this;
    }

    /**
     * Возвращает символьный код метки
     *
     * @return string
     */
    public function getCode() {
        return $this['code'];
    }

    /**
     * Устанавливает новый символьный код метки 
     *
     * @param  $code
     * @return Materials_Model_Label
     */
    public function setCode($code) {
        $this['code'] = (string)$code;
        return $this;
    }

}